package com.sdkj.dspservice.modules.report.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.sdkj.dspservice.common.base.entity.DataEntity;
import com.sdkj.dspservice.common.utils.StringUtils;
import com.sdkj.dspservice.modules.report.entity.tem.QueryColumn;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;

/**
 * 表配置实体
 * @author tm
 */
@Slf4j
@Data
@TableName(value = "report_table_config_column")
public class TableConfigColumn extends DataEntity<TableConfigColumn> {

    /**
     * 数据库类型
     */
    public static final String TYPE_VARCHAR = "VARCHAR";
    public static final String TYPE_INT8 = "INT8";
    public static final String TYPE_TIMESTAMP = "TIMESTAMP";
    public static final String TYPE_TEXT = "TEXT";

    /**
     * 查询方式（1：=  2：like  3.yyyy-MM-dd HH:mm:ss 时间区间  4.yyyyMMdd 时间区间）
     */
    public static final String QUERY_TYPE_EQUALS = "1";
    public static final String QUERY_TYPE_LIKE = "2";
    public static final String QUERY_TYPE_DATE_TIME_RANGE = "3";
    public static final String QUERY_TYPE_DATE_RANGE = "4";

    /**
     * 显示类型（1：字符串或数字   2：百分比   3.日期）
     */
    public static final String SHOW_TYPE_STRING_OR_NUMBER = "1";
    public static final String SHOW_TYPE_PERCENTAGE = "2";
    public static final String SHOW_TYPE_DATE = "3";

    /**
     * 名称
     */
    @NotBlank(message = "名称不能为空")
    private String name;
    /**
     * 表配置
     */
    @NotNull(message = "表配置不能为空")
    private String tableConfigId;
    /**
     * 列名
     */
    @NotBlank(message = "列名不能为空")
    private String columnName;
    /**
     * 注释
     */
    private String comment;
    /**
     * 是否显示
     */
    private String isShow;
    /**
     * 是否查询
     */
    private String isQuery;
    /**
     * 类型
     */
    private String type;
    /**
     * 查询方式（1：=  2：like  3.yyyy-MM-dd HH:mm:ss 时间区间  4.yyyyMMdd 时间区间）
     */
    private String queryType;
    /**
     * 排序
     */
    private Integer sort;
    /**
     * 显示类型（1：字符串   2：数字   3：百分比）
     */
    private String showType;
    /**
     * 用于查询的初始值
     */
    private String queryInitialValue;

    @TableField(exist = false)
    private TableConfig tableConfig;

    public TableConfigColumn() {
    }

    public TableConfigColumn(String id) {
        super(id);
    }

    public TableConfigColumn(TableConfig tableConfig) {
        this.tableConfig = tableConfig;
    }

    public TableConfigColumn(QueryColumn queryColumn, TableConfig tableConfig) {
        this.columnName = queryColumn.getName();
        this.tableConfig = tableConfig;
        this.comment = queryColumn.getComment();
    }

    /**
     * 返回queryType在antd中对应的ValueType
     * @return
     */
    public String getValueType(){
        String result;
        switch (queryType){
            case QUERY_TYPE_DATE_TIME_RANGE:
                result = "dateTimeRange";
                break;
            default:
                result = "text";
                break;
        }
        return result;
    }

    /**
     * 判断是否是日期
     * @return
     */
    public String getIsDate(){
        return StringUtils.inString(queryType, QUERY_TYPE_DATE_TIME_RANGE, QUERY_TYPE_DATE_RANGE) ? "1" : "0";
    }

}